type A = 'a' | 'b' | string // 联合，单类型(包括any)
type B = 'a' & string // 单类型或never

interface T1 {
    a: string
}

interface T2 {
    a: string
    b: boolean
}

type X = T1 & T2 // 交叉
type T3 = keyof X // 求值 => 'a' | 'b'
let t31: T3 = 'b'
let t32: T3 = 'a'
console.log(t31, t32)

type T4 = X['a'] // 求值
type T5 = X & string // 惰性的 或 never
type T6 = X | string // 惰性的
type U = T1 | T2 // 联合
type T7 = keyof U // (keyof T1) & (keyof T2)

// type T81 = U['a'|'b'] // 检查 ('a'|'b') in ((keyof T1) & (keyof T2))
type T82 = (U | {a:number})['a'] // 索引取值的操作高，T1['a'] | T2['a'] | .. | Tn['a']
type T9 = U & {a:number} // 惰性的，或never (求值方法: T1 & A | .. | T2 & A)
type T10 = U | {a:number} // 惰性的，或never 
